package main

import "fmt"

// 访问控制与函数一致
// 如果一个类型实现了String这个方法则fmt.Println会默认调用该函数进行输出
type student struct {
	name string
	age  int
}

func (s student) String() string {
	str := fmt.Sprintf("Name = %v,age = %v", s.name, s.age)
	return str
}

func main() {
	s := student{"张三", 21}
	fmt.Println(s)
}

// type integer int

// func (i integer) print() {
// 	fmt.Println(i)
// }

// func main() {
// 	var i integer = 20
// 	i.print()
// }

// 方法
// type A struct {
// 	num int
// }

// // 值传递
// func (a *A) test() {
// 	a.num = 15
// 	fmt.Println(a.num)
// }

// func main() {
// 	var a A = A{9}
// 	a.test()
// 	fmt.Println(a.num)
// }

// 和其他类型进行转换时需要有完全相同的字段(名字、个数、类型)
// 即便给相同结构体取别名也一样无法直接转换
// 若满足条件则可强转
// type student struct {
// 	age int
// }

// type person struct {
// 	age int
// }

// func main() {
// 	var s student = student{10}
// 	var p person = person{8}
// 	s = student(p)
// 	fmt.Println(s)
// }

//结构体的使用
// type human struct {
// 	name string
// 	age  int
// 	addr string
// }

// func main() {
// 	// var h1 human
// 	// fmt.Println(h1)

// 	// h1 = human{"张三", 12, "上海"}
// 	// fmt.Println(h1)

// 	var h1 *human = new(human)

// 	(*h1).name = "张三"
// 	(*h1).age = 4
// 	h1.addr = "北京"		//可以不用解引用
// 	fmt.Println(*h1)
// }
